// 一、运算符
// （一）算数运算符：+ - * / %（取余数） **（求幂）
// console.log(Math.pow(2,3));//2^3=8
// console.log(2**3);//2^3=8

// (二)一元运算符：作用于一个操作数
// 1.赋值运算符：=  把右边的值赋值给等号左边
// let a=5;
// // a=a+5;
// a+=5;//a=a+5;简写为a+=5
// console.log(a);//10
// // a=a-5;
// a-=5;
// console.log(a);//5
// // a=a*5;
// a*=5;
// console.log(a);//25

// 2.递增和递减
// 递增：++，每次增加1
// 递减：--，每次减少1
// 前置：把符号写在数据前面，例如 ++a；先自增或自减，再参与运算
// 后置：把符号写在数据后面，例如 a++；先参与运算，再自增或自减

// 例1：
// let a=5;
// console.log(a++);//5
// console.log(a);//6
// console.log(++a);//7

// 例2：
// let x=2;
// let y=5+ x++;//y=5+2=7  x++=3
// console.log(x,y);//3,7

// 例3：
// let a=10,b=5,c=9;
// c=a++ + b--;//c=a+b=10+5=15 a++=11 b--=4
// b=c-- - ++a;//++a=12 b=c-a=15-12=3 c--=14
// a=++b + --c;//++b=4  --c=13  a=b+c=4+13=17
// console.log(a,b,c);//17,4,13

// (三)比较运算符：结果只会是true或者false二者之一
// 1.关系运算符： > < >= <=
// 第一种比较：数字之间的比较
// console.log(2>8);//false
// // 第二种比较：字符串之间的比较，每个字符依次比较，比不出来就比较下一个字符，必出结果之后，就停止比较
// // 字符之间比较ASCLL的大小：A-Z:65-90  a-z:97-122
// console.log("hello">"world");//"h">"w" => 104>109 => false
// console.log("hello">"hei");//"l">"i" => true
// console.log("hello">"he");// true
// console.log("123">"89");// "1">"8" => false
// // 第三种比较：数字和字符串之间的比较，需要把字符串转成数字（隐形转换）进行比较
// console.log(12<"45");//"45"转换成45  12<45 =>true
// console.log(12<"hello");//"hello"转换成NaN  12<NaN =>false (NaN和任何数比大小都是false)
// console.log(12>"hello");//"hello"转换成NaN  12>NaN =>false (NaN和任何数比大小都是false)

// // 2.相等和不相等
// // 相等：==，值相等
// console.log(5=="5");//true
// console.log(null==0);//false
// // 不相等：!=
// console.log(5!="5");//false

// // 3.全等和不全等
// // 全等：===，值和数据类型都相等
// console.log(5==="5");//false
// // 不全等：!==
// console.log(5!=="5");//true

// (四)逻辑运算符
// 1.！：非，取反，作用于一个数据，运算结果是true或者false二者之一
// console.log(!"hello");//false
// console.log(!!"hello");//true
// console.log(!!undefined);//false

// 2.&&:与，作用于两个数据，运算结果是参与运算的数据
// 短路现象：如果第一个操作数为真（转成布尔值为true），就返回第二个操作数
//          如果第一个操作数为假（转成布尔值为false），就直接返回第一个操作数
// console.log(1&&2);//2

// console.log(2 && x);//报错
// console.log(0 && x);//0


// 3.||：或，作用于两个数据，运算结果是参与运算的数据
// 短路现象：如果第一个操作数为真（转成布尔值为true），就返回第一个操作数
//          如果第一个操作数为假（转成布尔值为false），就直接返回第二个操作数
// console.log(1 || 2);//1
// console.log(0 || 2);//2
// console.log(0 || x);//报错
// console.log(2 || x);//2

// 逻辑运算符优先级：！>&&>||
console.log( 7 && undefined || !"hello" );//false
// 第一步： !"hello" =>false
// 第二步： 7 && undefined => undefined
// 第三步：undefined || false =>false

console.log(null || (NaN && !"123") || 8);//8
// 第一步：!"123" =>false
// 第二步：NaN && false =>NaN
// 第三步：null || NaN =>NaN
// 第四部：NaN || 8 =>8


let age=16;
console.log(age>=18 && age<=35);//false
// 第一步：16>=18 =>false
// 第二步：16<=35 =>true
// 第三步：false && true => false
